// 频道管理的模块
import { reqGetChannels, reqGetAllChannels } from '@/api/channels'
const state = {
  // 我的频道的数据
  channels: [],
  // 所有频道数据
  allChannels: []
}
// 修改state中数据
const mutations = {
  // 设置我的频道
  setChannels (state, channels) {
    state.channels = channels
  },
  // 设置所有频道
  setAllChannels (state, channels) {
    state.allChannels = channels
  },
  // 点击可选频道新增我的频道
  addChannel (state, channel) {
    state.channels.push(channel)
  },
  // 点击我的频道移除频道
  delChannel (state, index) {
    state.channels.splice(index, 1)
  }
}
// 异步处理
const actions = {
  // 获取我的频道
  async getChannels (context) {
    const data = await reqGetChannels()
    // console.log(data)
    // 提交一个mutation 让这个mutation给channels赋值
    context.commit('setChannels', data.data.channels)
  },
  // 获取所有频道
  async getAllChannels (context) {
    const data = await reqGetAllChannels()
    // console.log(data) // 获取到所有的频道没有推荐频道
    context.commit('setAllChannels', data.data.channels)
  }
}
// 基于state中的数据派生的数据
const getters = {
  // 可选频道的数组  = 全部频道 - 我的频道 过滤filter全部频道
  /*  optionalChannels (state) {
     const res = state.allChannels.filter(item => {
       let flag = false
       state.channels.forEach(channel => {
         if (item.id === channel.id) {
           flag = true
         }
       })
       return !flag
     })
     console.log(res)
     return res
   } */
  // all = [{id:1,name:'xx'},{id:2,name:'xx'},{id:3,name:'xx'},{id:4,name:'xx'}]
  // my =  [{id:1,name:'xx'}]
  // 可选 = [{id:2,name:'xx'},{id:3,name:'xx'},{id:4,name:'xx'}]
  optionalChannels (state) {
    return state.allChannels.filter(item => {
      // findIndex 找索引找不到就返回-1   forEach map filter some every find findIndex
      const i = state.channels.findIndex(channel => channel.id === item.id)
      // console.log(i)
      // if (i === -1) {
      //   return true
      // } else {
      //   return false
      // }
      return i === -1
    })
  }
}
export default {
  namespaced: true, // 开启命名空间, mutations actions getters 不会挂载到全局
  state,
  mutations,
  actions,
  getters
}
// 导出并挂载到index.js中

// 1. 在这个模块中发送请求,将请求回来我的频道保存在state中
